# -*- coding: utf-8 -*-
"""
替换征信报文里面字段，把字段名替换为中文方便查阅，如：
<Document>
    <EAA>
        <EA01>
            <EA01A>
                <EA01AI01>2019111210415261467258</EA01AI01>
                <EA01AR01>2019-11-12T10:41:52</EA01AR01>
            </EA01A>
            <EA01B>
                <EA01BI01>D10121100H1001</EA01BI01>
                <EA01BD02>17</EA01BD02>
            </EA01B>
替换如下：
    <报告头>
        <报告头信息单元>
            <报告标识信息段>
                <报告编号>2019111210415261467258<>
                <报告生成时间>2019-11-12T10:41:52<>
            <查询请求信息段>
                <查询机构代码>D10121100H1001<>
                <查询原因>17<> 
-----------------------------
index文件格式如下：
zw	bh
报告头	EAA
信用提示信息	EBA
借贷交易汇总信息	EBB
担保交易汇总信息	EBC
"""

import pandas as pd
import re

#获取字段对应中文
df_index = pd.read_excel('index.xlsx',head=True)

#最小匹配 替换<>符号中间字符
p1 = re.compile(r'[<](.*?)[>]', re.S)


f = open('test2.xml', 'r+')
all_the_lines = f.readlines()
f.seek(0)
#清空后替换，不加truncate则替换前跟替换后同时都在
f.truncate()
for line in all_the_lines:
    try:
        arr=re.findall(p1, line)
        #print(arr[0])
        replace_target=df_index.iloc[df_index[df_index['bh']==arr[0]].zw.index.tolist()[0]].at['zw']
        #<EA01AI01>2019111210415261467258</EA01AI01> 只替换报文每行前面名称，后面剔除避免字多杂不好观看
        if line.count('<') > 1:
            line = line.replace(arr[1], '')
            line = line.replace(arr[0], replace_target)
            f.write(line)
        else:
            line = line.replace(arr[0], replace_target)
            f.write(line)
    except IndexError:
        continue
f.close()


